home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / cross / GBDK-2.0.lha / GBDK / lib / sprintf.c < prev    next >
C/C++ Source or Header  |  1998-10-01  |  1KB  |  74 lines

  1. #include <stdio.h>
  2. #include <stdarg.h>
  3.  
  4. BYTE sprintf(char *s, char *fmt, ...)
  5. {
  6.   va_list ap;
  7.   BYTE nb = 0;
  8.  
  9.   va_start(ap, fmt);
  10.   for(; *fmt; fmt++)
  11.     if(*fmt == '%') {
  12.       switch(*++fmt) {
  13.       case 'c':
  14.     /* char */
  15.     *(s++) = va_arg(ap, char);
  16.     break;
  17.       case 'd':
  18.     /* decimal int */
  19.     s += sprintn(s, va_arg(ap, BYTE), 10, SIGNED);
  20.     break;
  21.       case 'u':
  22.     /* unsigned int */
  23.     s += sprintn(s, va_arg(ap, BYTE), 10, UNSIGNED);
  24.     break;
  25.       case 'o':
  26.     /* octal int */
  27.     s += sprintn(s, va_arg(ap, BYTE), 8, UNSIGNED);
  28.     break;
  29.       case 'x':
  30.     /* hexadecimal int */
  31.     s += sprintn(s, va_arg(ap, BYTE), 16, UNSIGNED);
  32.     break;
  33.       case 's':
  34.     /* string */
  35.     s += sprint(s, va_arg(ap, char *));
  36.     break;
  37.       case 'l':
  38.     /* long */
  39.     switch(*++fmt) {
  40.     case 'd':
  41.       /* decimal long */
  42.       s += sprintln(s, va_arg(ap, WORD), 10, SIGNED);
  43.       break;
  44.     case 'u':
  45.       /* unsigned long */
  46.       s += sprintln(s, va_arg(ap, WORD), 10, UNSIGNED);
  47.       break;
  48.     case 'o':
  49.       /* octal long */
  50.       s += sprintln(s, va_arg(ap, WORD), 8, UNSIGNED);
  51.       break;
  52.     case 'x':
  53.       /* hexadecimal long */
  54.       s += sprintln(s, va_arg(ap, WORD), 16, UNSIGNED);
  55.       break;
  56.     }
  57.     break;
  58.       case '%':
  59.     /* % */
  60.     *(s++) = *fmt;
  61.     break;
  62.       default:
  63.     *s = 0;
  64.     return -1;
  65.       }
  66.       nb++;
  67.     } else
  68.       *(s++) = *fmt;
  69.   va_end(ap);
  70.   *s = 0;
  71.  
  72.   return nb;
  73. }
  74.